package com.orange.singlePatterns;

/**
 * @Description: 双检锁单列
 * 主要是为了提高性能，使用双重检查锁定来初始化单例实例。
 * 在多线程环境下，双重检查锁定可以保证在需要时才初始化单例实例，从而避免不必要的同步开销。
 * 是懒汉式的升级版本
 */
public class DoubleCheckLockSingleton {
    //设置单列
    //volatile关键字确保线程可见性---防止单列对象是半初始化状态
    private volatile static DoubleCheckLockSingleton INSTANCE=null;

    //私有构造函数
    private DoubleCheckLockSingleton(){}

    //提供公共方法获取单例实例
    public static DoubleCheckLockSingleton getInstance(){
        if(INSTANCE==null){
            synchronized (DoubleCheckLockSingleton.class) {
                if(INSTANCE==null){
                    INSTANCE=new DoubleCheckLockSingleton();
                }
            }
        }
        return INSTANCE;
    }
}
